class Solution:
    def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
        def func(nums1: list, i: int, nums2: list, j: int, k: int):
            if i >= len(nums1):
                return nums2[j + k - 1]
            if j >= len(nums2):
                return nums1[i + k - 1]
            if k == 1:
                return min(nums1[i], nums2[j])
            minVal1 = nums1[i + k // 2 -
                            1] if i + k // 2 - 1 < len(nums1) else 2**31
            minVal2 = nums2[j + k // 2 -
                            1] if j + k // 2 - 1 < len(nums2) else 2**31
            if minVal1 < minVal2:
                return func(nums1, i + k // 2, nums2, j, k - k // 2)
            else:
                return func(nums1, i, nums2, j + k // 2, k - k // 2)

        m = len(nums1)
        n = len(nums2)
        k = (m + n) // 2 + 1
        if (m + n) % 2 == 0:
            left = func(nums1, 0, nums2, 0, k - 1)
            right = func(nums1, 0, nums2, 0, k)
            return (left + right) / 2
        else:
            return func(nums1, 0, nums2, 0, k)
